@L}5 _$% l0$)$$Hȱ$ UhL" `e$$%`$%`  R@P!( L(1   Y I`  d  Ld M * @  $ % CC$$)%1 Udߥ$9%: !0 S$% DD˙`  }J)Lr d M * @  $ % CC$$)%1 Udߥ$9%: !0 S$%} DD˙`  }J)Lr J  ((  p L ()   J}L= ( L 0q A    IB JC;? D W } LL  ` W )LA!  ߰")-݆ p" } $G@LL 08`Q")<2Q0 -G$Ș݆ UL# ; p8(()(0ʥ)NQ` }$GȘ݆LU )L ݆ L GȘ ݆LL )W>Z   HH)H }p h  hyhy D L> L JJ    ! LA*` BF }7'8  M HN H` 8 Z  \LdJJ!"! GFE@F (!L }EE !E^ ^ E E7EȩEdE/EȩE  D } .L }  ;F d  ;?F7F? ( .   Z D LL d } . D  L    p  E` , d)  D L) 0BM݊L݉} ML  N݆ L NLML [ TEqEHȱEqEh 0Gȹ G} HLL GɛL  LFREE SECTORS G) *Gȩ GȽG GȌ*jj >G} C8jJ3j2CD( C202C ԠBX` N 1? l LlD:RAMDISK}.COMLu L1 L ;LHL  T`  `1  ɐ     `TU  } L ? .  t`GBJ ~DEHI B V0dV!}QDEHI VF9 ,0 ,0 s0hhL  L` H hDHEh"}DEL8HI4 0 HI,0 0  9 .G VLO#},0 L4*IJ`llD1:AUTORUN.SYSNEED MEM.SAV TO LOAD THIS FILE.D1:MEM.SAV J y08 B|DEHI$} V0 0`B;DEL`?<0LV`@ʆ v s? F0Ξ05: [ BDEHI%} VY8 B V  @  /DE `E:D1:DUP.SYSERROR-SAVING USER MEMORY ON DISKTYPE Y TO &}STILL RUN DOS B;DE J  (` 9 V⪍ ઍ  -'}LLu ÝDEHILV 9 .l 9 .l  `` s$B BH(}I|DE V BLV nB,DE JLV B V BLVDEIʩ BꭝLu  } 3E:}DISK OPERATING SYSTEM II VERSION COPYRIGHT 1984 ATARI CORP.A. DISK DIRECTORY I. FORMAT DISKB. RUN CARTRIDG*}E J. DUPLICATE DISKC. COPY FILE K. BINARY SAVED. DELETE FILE(S) L. BINARY LOADE. RENAME FILE M. RUN AT ADDRES+}SF. LOCK FILE N. CREATE MEM.SAVG. UNLOCK FILE O. DUPLICATE FILEH. WRITE DOS FILES P. FORMAT SINGLEL !N',}#"&))9(&*)/h)''-&؆莟R'S  vL/ˢ L }Insert DOS 2.0s, type Y Λx -}DEfHI 1莏#q! @ y0ɛ8A0,' ȅ 1 1ild! 1L!NO SUCH ITEMSELECT.} ITEM OR FOR MENU! 0 .z:*{}.|{ 1 0 0JB 18L%|DL/}%DIRECTORY--SEARCH SPEC,LIST FILE?[# 0 0 &|D3" 1L!NOT A DISK FILEN !B 1L!E# 1 !BD0}ED:}:1BJ|DE 1DEBHI 1 h0ߢ 0.1}  0?詛 1 y0YЛ 1 ;#L" ;#L! BL1TYPE "Y" TO DELETE...DELETE FILE SPEC2}COPY--FROM, TO?OPTION NOT ALLOWED736 FREE SECTORS COPYING---D1:DIRECK.COMl# 0|D .L/%#3}##JB|DE 1BHID#E 1#0: B 1L!#͑### B 1#c$0SY4}S1}:## # # .#Ƚ# # 𩛙## 1,#PD#ELJ- <.BJD#E 5}1 1HH 0hh|DL%1}:̳# L% #D#EL% 1 0 . .0O% 1L!WILD CARDS NOT A6}LLOWED IN DESTINATION 0 <.|K}N 2 FORMAT. t* 5) 1L!`) 0NΞ 0 L1) 1 L!BAD LOAD FILELOAD FROM WHAT FILE?) 0 ?}0#B 1L!WHAT FILE TO LOCK?) 0 0$B 1L!WHAT FILE TO UNLOCK?DUP DISK-SOURCE,DEST DRIVES?TYPE "Y" IF OK TO US@}E PROGRAM AREACAUTION: A "Y" INVALIDATES MEM.SAV.FE! +L1   `*  70 2 2A} 0.* 1 y0 0)INSERT BOTH DISKS, TYPE RETURN^, 1 y038逍 N, 1L! ,B}C, t*  Lx+, 0 ^, 1 y0 , ,0,0 ,L+ ,I0 ,Vǭ0C}Ξ, 0 }, 1 y0C,ШC, 0K'!" H H 'h h Lx+!EF 5L1L!D,I,HhD}` NOT ENOUGH ROOMINSERT SOURCE DISK,TYPE RETURNINSERT DESTINATION DISK,TYPE RETURNE}`  `8 rL1`-* 1P* 1 y0Y`hhL!NAME OF FILE TO MOVE?- 0 0|DL% <.F},^ 1 70 0 .@L# .BJ 1  DEHIB V L1 ,} 1 70,L.  G}JB|,#P#DE 1 HI BDEHHII 1 B 1 ,^ 1 70,0La- B V,#PH},^ 1 70 0L#L!-* 1P* 1 y0Yj383}mm ݭI}}`8}``|* ? ɛ,`|:-)| / 1L!`DESTINATION CANT BE DOJ}S.SYS0 0H{ 24Δ 28/L!/) 2 Π 2 0 ξK}hAΞB,0 J 1 BDEHI,HÝDE 1HIHIDELSAVE-GIVE L}FILE,START,END(,INIT,RUN)O S0 1`BDEPHI V` S0H 1 L!M}0 0 1L~0`PLEASE TYPE 1 LETTER,0`hhL! 70 1L0L<1 ,;ɛ7,"ɛ:ݦ1ݥN}A"D|ݤD|ȩ:|ȩ|ɛ,,(/+.ީ1 1,ɛ`轤{NAMEO} TOO LONG B VL!` L1I H1EΝDL1|mDiE` V0`8d/8 i:222 1 LP}!ERROR- 138ɛ+,' 20*.. өr2 1``2TOO MANY DIGITSINVALID HEXAQ}DECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8uR} ECIMAL PARAMETER800 0 8 00`,0'D800 H,ɛh`2L1NEED D1 THRU D8u This information is from the OSS bulletin board (408-446-3451). The Official Procedure: To Turn a SuperCart OFF: 1> CT}lose I/O Channel 0 2> Wait for the LSB of RTCLOK ($14) to change value. 3> Do an SEI 4> Save $AFFF ... this is the 'carU}t status' register ... you'll need it if you wish to restore the cart 5> STA $D508. This turns the cart OFF. 6> Poke $3FV}A(GINTLK), 0 to tell the OS that there is no cart installed. 7> Poke $6A(RAMTOP),$C0 to tell OS that full RAM is available.W} 8> Do a CLI 9> Open #0,12,0,"E:" To Turn a Supercartridge back ON: 1> Perform steps 1-3 from above. 2> LDX with 'X}cart status' value saved in step 4 above. 3> STA $D500,X. This turns cart ON 4> Poke $3FA,1 to tell OS that there is aY} cart. 5> Poke $6A,$A0 to tell OS that less RAM is available. 6> Perform steps 8-9 from above. Notes: These shoulZ}d be obvious, but if you're a space case like me... The ON/OFF code MUST be 'safe'. That is, if RAM resident, it should not[} be overwritten by any application you may be running, whether under Cart control or not. (Especially the $AFFF value if you'\}ll want to turn the cart back on!) Disk .COM files are a viable alternative. Once the cart is off, there MUST be a program ]}IN PLACE to take over control of the computer! That may be DOS or it might be your own code. Depending on exactly what you'^}re doing, some sort of RESET handler might prove useful. Again depending on application, XL/XE users may want to add PORTB _}manipulations. ion, XL/XE users may want to add PORTB VUUU`E: B Vxթ өjXBVDUE J Vl YU a}UU`E: B Vxթ өjXBVDUE J Vl YU UUU`E: B VxթjXBVDUE JLVYUc}UU`E: B VxթjXBVDUE JLVYU10 REM :TBALL2.BAS 100 REM *** POKE MACHINE CODE *** 110 REM 1536-1619 111 DATA 104,169,0,133,212,133,213,173,0,211,41,2,133,e}205,160,255,173,0,211 112 DATA 41,2,197,205,240,2,230,212,133,205,136,208,240,173,0,211,41,1,208 113 DATA 6,165,212,9,128,133f},212,173,0,211,41,8,133,205,160,255,173,0,211 114 DATA 41,8,197,205,240,2,230,213,133,205,136,208,240,173,0,211,41,4,208 115 g}DATA 6,165,213,9,128,133,213,96,-1 116 FOR I=1536 TO 1619:READ J:K=K+J:POKE I,J:NEXT I 117 IF K-11306 THEN ? "BAD DATA!":END h}120 REM 130 GRAPHICS 0:POKE 710,0:POKE 752,1:REM BLACK BACKGROUND ,NO CUSOR 131 POSITION COL,ROW:? " ";:REM ERASE OLD OBJECT i}200 REM READ TBALL 210 U=USR(1536):Y=INT(U/256):X=U-Y*256 220 IF X>127 THEN X=X-128:IF X THEN X=-X 221 IF Y>127 THEN Y=Y-128:j}IF Y THEN Y=-Y 310 POSITION COL,ROW:? " "; 320 COL=COL+X:REM CALCULATE NEW COLUNM 321 IF COL>39 THEN COL=39 322 IF COL<0 THENk} COL=0 330 ROW=ROW+Y 331 IF ROW<0 THEN ROW=0 332 IF ROW>22 THEN ROW=22 340 POSITION COL,ROW:? "+"; 350 GOTO 200 IF COL<0 THENp ;TRACK1.ACT ;Display the value read from ;port 1 as track-ball values. ;9/87 Written bye Joe McFarland PROC PrintT(BYTE valm}) ;Binary number print: ;Print byte in base Two. ;Modified to only print 4 LSbits. BYTE mask,n mask=$08 FOR n=0 TO 3 DO IF n}val&mask THEN Put('1) ELSE Put('0) FI mask==RSH 1 OD RETURN PROC Main() BYTE b,cursor=752,consol=53279 cursor=o}1 Position(2,3) PrintE("|||LHorizontal Dir 0=left, 1=right") PrintE("||LHorizontal Rate") PrintE("|Vertical Dir 0=up, 1=down"p}) PrintE("Vertical Rate") DO b=Stick(0) Position(2,2) PrintT(b) Until consol<>7 OD cursor=1 RETURN tical Dir 0=up, 1=down"f ;TRACK3.ACT ;Rudimentary PM cursor positioning ;using Track-Ball peripheral ;PM routines added ;Single line rez. ;9/87 BYTEr} ARRAY player_base BYTE ARRAY shposp(4) ;pm horiz shadow array. CHAR ARRAY imagep=[ $F0 $90 $90 $90 s} $90 $90 $90 $F0 $00 $18 $18 $7E $7E $18 $18 $00 ] ;***t}********************************* ;Move specified player to the ;ABSOLUTE x location (0 to ?). PROC MovePlayerHor(BYTE pl_nu}um BYTE pl_x) BYTE ARRAY hposp=53248 shposp(pl_num)=48+pl_x hposp(pl_num)=shposp(pl_num) RETURN ;******v}****************************** MODULE BYTE ARRAY old_pl_y(4)=[0 0 0 0] ;Move specified player to the ;ABSOLUTE y location. (fw}rom 0 to ?.) PROC MovePlayerVer(CARD pl_num BYTE pl_y) BYTE playery CARD pl_offset pl_offset=player_bx}ase+$400+pl_num LSH 7 Zero(pl_offset+old_pl_y(pl_num),8) playery=15+pl_y MoveBlock(pl_offset+playery, imagep+pl_y}num LSH 3,8) old_pl_y(pl_num)=playery RETURN ;************************************ ;Move player to absolute x,y ;x=0 to ?, z}y=0 to ? PROC MovePlayer(BYTE pl_num,pl_x,pl_y) MovePlayerHor(pl_num,pl_x) MovePlayerVer(pl_num,pl_y) RETURN ;***********{}************************* PROC PlayerCursor() BYTE pmbase=54279,gractl=53277, gprior=623 BYTE ARRAY pl_color=704, |}PMWidth(5)=$D008 BYTE ramtop=106,sdmactl=$22F ramtop=$A0-8 ;presumes 40K of memory Graphics(0) player_base=(ramtop)*256 pmb}}ase=player_base/256 sdmactl=32+8+2+16 ;no missles... gractl=2 ;again no missles. Zero(player_base,$800) pl_color(0)=1~}10 ;pl_color(1)=70 gprior=1 MovePlayer(0,0,0) ;MovePlayer(1,4,10) RETURN ;************************************ PROC ClearPM}() BYTE ramtop=106,sdmactl=$22F BYTE cursor=752 BYTE pmbase=54279,gractl=53277, gprior=623 cursor=0 gractl=0 sdmactl=32+}2 ;Zero(hposp,4) ramtop=$A0 Graphics(0) RETURN ;************************************ PROC Main() BYTE cursor=752,consol=53}279, left_margin=82 BYTE lastx,lasty,vx,vy,st INT x,y,oldx=[0],oldy=[0] PlayerCursor() cursor=1 left_margin=0 SetCol}or(2,9,0) PutE() PrintE("This is a line of normal text.") PutE() PrintE("This is a line of inverse text.") X=0 Y=0 lastx=0 la}sty=0 WHILE consol&$01 DO st=stick(0) vx=st&$02 vy=st&$08 IF lastx<>vx THEN IF st&$01 THEN x==+1 } ELSE x==-1 FI FI IF lasty<>vy THEN IF st&$04 THEN y==+1 ELSE y==-1 FI FI last}x=vx lasty=vy IF x>157 THEN x=157 FI IF y>201 THEN y=201 FI IF x<0 THEN x=0 FI IF y<17 THEN y=17 FI IF oldx<>x OR oldy<}>y THEN MovePlayer(0,X,Y) FI IF STRIG(0) THEN ELSE Position(0,10) PrintF("X=%I %EY=%I %E",X,Y) FI oldx=x oldy=y OD Cle}arPM() Graphics(0) left_margin=2 cursor=0 RETURN ELSE Position(0,10) PrintF("X=%I %EY=%I %E",X,Y) FI oldx=x oldy=y OD Cle1The next program demostrates ACTION!'s Ability to run 2 or more procedures at the same time. The Move_cursor routine runs ind }ependent of Main Proc. This Program is extra for Action Programers. ----------------------------(Cut Here)------------------- }-------------- ;TRACK4.ACT ;Rudimentary PM cursor positioning ;using Track-Ball peripheral ;PM routines added ;Single line re }z. ;Vertical blank ;9/87 DEFINE SPEED="2" DEFINE JMP="$4C", XITVBV="$E462", SAVETEMPS= "[$A2 $07 $B5 $C0 $48 $B5 $A0 }$48 $B5 $80 10 dF1 $A5 $D3 $48]", GETTEMPS= "[$68 $85 $D3 $A2 $00 $68 $95 $A8 $68 $95 $80 $68 $95 $A0 $68 $95 $C0 $E8 $E0 $ }08 $D0 $EF]" CARD OldVbi,VBIvec=$224 BYTE critic=$42 BYTE ARRAY player_base BYTE ARRAY shposp(4) ;pm horiz shadow array. CH }AR ARRAY imagep=[ $0 $90 $90 $90 $90 $90 $90 $F0 $00 $18 $18 $7E } $7E $18 $18 $00 ] INT x=[0],y=[0] ;************************************ ;Move specified } player to the ;ABSOLUTE x location (0 to ?). PROC MovePlayerHor(BYTE pl_num BYTE pl_x) BYTE ARRAY hposp= }53248 shposp(pl_num)=48+pl_x hposp(pl_num)=shposp(pl_num) RETURN ;************************************ MODULE BYTE ARRAY o }ld_pl_y(4)=[0 0 0 0] ;Move specified player to the ;ABSOLUTE y location. (from 0 to ?.) PROC MovePlayerVer(CARD pl_num } BYTE pl_y) BYTE playery CARD pl_offset pl_offset=player_base+$400+pl_num LSH 7 Zero(pl_offset+old_pl_y(pl_ }num),8) playery=15+pl_y MoveBlock(pl_offset+playery, imagep+pl_num LSH 3,8) old_pl_y(pl_num)=playery RETURN ;** }********************************** ;Move player to absolute x,y ;x=0 to ?, y=0 to ? PROC MovePlayer(BYTE pl_num,pl_x,pl_y) }MovePlayerHor(pl_num,pl_x) MovePlayerVer(pl_num,pl_y) RETURN ;************************************ PROC PlayerCursor() BYT }E pmbase=54279,gractl=53277, gprior=623 BYTE ARRAY pl_color=704, PMWidth(5)=$D008 BYTE ramtop=106,sdmactl=$22F ramt }op=$A0-8 ;presumes 40K of memory Graphics(0) player_base=(ramtop)*256 pmbase=player_base/256 sdmactl=32+8+2+16 ;no missles }... gractl=2 ;again no missles. Zero(player_base,$800) pl_color(0)=110 ;pl_color(1)=70 gprior=1 MovePlayer(0,0,0) ;Mov }ePlayer(1,4,10) RETURN ;************************************ PROC ClearPM() BYTE ramtop=106,sdmactl=$22F BYTE cursor=752 BY }TE pmbase=54279,gractl=53277, gprior=623 cursor=0 gractl=0 sdmactl=32+2 ;Zero(hposp,4) ramtop=$A0 Graphics(0) RETURN ;* }*********************************** PROC Move_Cursor() BYTE lastx=[0],lasty=[0], vx=[0],vy=[0],st INT oldx=[0],oldy= }[0] SAVETEMPS st=stick(0) vx=st&$02 vy=st&$08 IF lastx<>vx THEN IF st&$01 THEN x==+SPEED ELSE } x==-SPEED FI FI IF lasty<>vy THEN IF st&$04 THEN y==+SPEED ELSE y==-SPEED FI FI } lastx=vx lasty=vy IF x>157 THEN x=157 FI IF y>201 THEN y=201 FI IF x<0 THEN x=0 FI IF y<17 THEN y=17 FI IF oldx<>x OR } oldy<>y THEN MovePlayer(0,X,Y) FI oldx=x oldy=y GETTEMPS ; get temp registers [JMP XITVBV] ; exit the VBI ;*********** }*************************** PROC ClearVB() critic=1 VBIvec=OldVBI critic=0 RETURN ;************************************** }PROC VBinst(); install the VBI critic=1 ; turn off the interrupts OldVBI=VBIvec VBIvec=Move_Cursor ; VBI routine. critic=0 ; } turn the interrupts back on RETURN ;************************************ PROC Main() BYTE cursor=752,consol=53279, }left_margin=82 PlayerCursor() cursor=1 left_margin=0 SetColor(2,9,0) PutE() PrintE("This is a line of normal text.") PutE() }PrintE("This is a line of inverse text.") VBinst();This is where we start the Move_Cursor proc WHILE consol&$01 DO Position( }0,10) PrintF("X=%I %EY=%I %E",X,Y) OD ClearVB();This is where the Move_Cursor is terminated ClearPM() Graphics(0) left_mar }gin=2 cursor=0 RETURN EY=%I %E",X,Y) OD ClearVB();This is where the Move_Cursor is terminated ClearPM() Graphics(0) left_mar  Taming your machine with a mouse has long been a dream of the ATARI 8-bitters. The mouse had it's origins around the 1960's,$} but did see much use until the 1980's when the Mac,ST and Amiga were unveiled. The mouse was also used by the engineering wo$}rld as an input device for graphics workstations in the late 70's. The Track-ball is a close relative to the Mouse. A track-$}ball is basicly the same device flipped over allowing the hand position the ball directly. The Old ATARI did have some fores$}ight in developing input devices for the 8-bit machines. The TrackBall is one of them. The Track-ball allows smooth tracking$} of 2 dimensional motion and its associated velocity. Atari Basic is too slow so it can not be read with atari basic. Faster$} langauges such ACTION and Assembly can read the velocity vectors directly from the joystick registers. (mention something ab$}out which bits represent the direction and speed.) One thing the Atari Trak Ball lacks is a separate button that can function$} as the left mouse button. Since the mouse and the Track-ball are virtually the same device it should be possible to read and$} ST mouse using the Trak-ball read code. The 8-bits can read the ST left mouse if a pull-up resistor is added to pin 6. Her$}es the pinout on the ST mouse. _____________ \ 1 2 3 4 5 / \ 6 7 8 9 / --------- 1- up/xb 2- down/xa 3- left/ya 4- right/$}yb 5- not connected 6- Fire/left mouse button 7- +5vdc 8- ground 9- Joystick 1 Fire/Right Mouse button. I have included 3 p$}rograms that demostrate the trak-balls ability to read direction and velocity. One program is written in basic with a short $}assemble used to read the T-ball input vector. The other 2 programs are written in ACTION! $} | | | Mike Buford | | | 8-bits Forever/ Dflint02@ulkyvx.bitnet or $}| | | Whether i buy a new CL150652@ulkyvm.bitnet / | \ machine or not! (An Action Programmer!) $} / | \ ew CL150652@ulkyvm.bitnet / | \ machine or not! (An Action Programmer!) $({+OSB JKD*E V䩨H)H /H)H / H*H /UT9H*H /UT]H*H /U TH*H /(}UTH*H / /E7 UT 0UTH*H / /Y /LtUT 0Lu(A_ UT 0UTH+H / /Y. / (B(}D*EHIJK VL)UT 0Lu(M_ UT 0UTH*H / /Y. / (BD*EHIJ(}K VL)UT 0Lu(1 : 0L'(C 0L'(Lu(Lu(} AtariWriter 80 Auxiliary Menu (} by Jeff McWilliams Atari Classics -- 1993tariWriter 80 ail Mergexit to DOS (} - File Directoryhange AP.OBJENTER SELECTIONK:E:EXIT TO DOS, ARE YOU SURE? [Y/N] GO TO MAIL MERGE PROGRAM(}? [Y/N] D:AP.OBJD:MM.OBJGO BACK TO ATARIWRITER? [Y/N] INPUT PATH>MASK OR RETURN FOR ALL (} ~++D1:D1:++0,D4h|+h}+hh}+H|+HƢ\>: 梦,ɛ(}*.*`h|+h}+hh}+H|+H Ȑ 28L,d 18d 8 L,i0i0`Directory OPEN Error .Dire(}ctory READ Error .File OPEN Error .File READ Error .File WRITE Error .,,-*-?-PRESS ANY KEY TO CONTINU(}E. U-ȱ_-eeHH , 0HH /dH-H / /`h|+h}+hh}+H|+H} b/(}H+H /0H,H /0BDEJK VL.օ+M N0BDEIH V02Ƣ"ɛ (} eeLG.H+H /L,. H+H /0CɈ  -0H,H /0H,H /0H,H /dH-H / /0 B V(}`C -L.h|+h}+hhh}+H|+H / {Ģ b/L"/~ Ƥ b/ ɛL"/` BD(}EHI V` B V BJKD*E VBDEHI V B V䥣` B V B V`h|+(}h}+hEhD}+H|+H BHI V`DH+H /`++UT 0UT"H+H /UT~H+H /UT: b/H+H(}ab588@yfn.ysu.edu irst, or use RD576, RD260, or RDNEWELL. Things work fine with ,>Date: 23 Oct 90 03:08:48 GMT From: noao!ncar!zaphod.mps.ohio-state.edu!nisca.ircc.ohio-state.edu!hpuxa.ircc.ohio-state.edu@ar0}izona.edu (Frank E. Seipel) Subject: Blackbox/MIO comparison To: Info-Atari8@naucse.cse.nau.edu Having had the opportunity 0}to use both the BlackBox from CSS (computer Software Services) and the MIO from ICD, I thought I would share what I have lear0}ned about these two unique pieces of hardware for the 8-bit Atari. The systems I have used include: 130XE computers (upgrade0}d to 512K), 1-meg MIO, 256K MIO, BlackBox, Supra Modem 2400, Seikosha MP1300AI printer, 2 Happy 1050 floppy drives, an Adapte0}c 4000a hard drive controller, 2 Adaptec 5500 hard drive controllers, a Seagate ST225 20 meg hard drive, a ATASI 3046 40 meg 0}hard drive, and a CMI 5516 13 meg hard drive. What is a MIO or a Blackbox? An explanation of just what the MIO and BlackBo0}x are is in order. Both include a SASI/SCSI hard disk interface, a printer port, a RS232 port, and some type of printer buffe0}r. The MIO comes with either 256K or 1 megabyte of dynamic RAM on board which can be used as any combination of ramdisk(s) an0}d printer spooler. The BlackBox comes either with no user ram or 64K of static ram which can be used only as a printer buffe0}r. Additionally, the BlackBox (BB) can use the standard extended banks of a 130XE as a 64K printer buffer. The RS232 and/or 0}printer ports can be disabled in both units to allow an external device such as an Atari 850 interface to be used. Both come0} with clear manuals printed on 8 1/2 by 11 inch unbound paper. The pinouts for all ports are clearly shown in the manuals and0} there are examples showing how to set up a hard disk system. The BBS manual includes several short assembler listings showin0}g some methods of accessing the BB from machine language. Appearance The MIO comes in a nice gray case with the SCSI conne0}ctor and printer port on one end. The other end has the RS232 port, on/off switch, power plug, and two LED's - one is a power0} indificator and the other lights up when the MIO is busy. My 1-meg MIO has a second 9 pin plug on this end for a planned 80 0}column adapter which never happened. The 50 conductor ribbon cable which plugs into the computer is on one side. The BB com0}es with no case. Cases are available for it for $39.95 (and they are even black!). On the front edge is the connector which p0}lugs into the 130XE. The other side has the SCSI connector, the floppy controller connector (see below), and the power plug. 0}The printer plugs onto one end and the modem to the other. The BBS also has two LED's which serve the same functions as the o0}nes in the MIO. Plugging it in The MIO has a 50 pin connector which plugs in to the parallel expansion port on a 600XL or 0}800XL. An XE adapter must be purchased for $16.95 to plug the MIO into a 130XE computer. This adapter plugs into both the ECI0} port and the cartridge port on the 130XE and has sockets for two cartridges on it. The second cartridge plug is primarily fo0}r R-Time 8 cartridge from ICD. The BlackBox is built to plug directly into the 130XE. It comes with a short 50 pin cable for0} plugging into an XL machine. No extra adapter is needed. For my own system, I use the XE adapter from ICD and plug the 50 pi0}n cable on the BB into it (I use the R-Time 8 and this keeps the cartridge stack shorter). The MIO has the expected 9 pin an0}d 15 pin d-connectors for plugging in your printer and modem. The BB comes with 34 pin card edges for use with 34 conductor r0}ibbon cable. You can use both standard crimp-on connectors for both cables (use 25 conductor ribbon cable for the modem cable0}) or you can buy the cables you need from CSS. There is also an unused 34 connection card edge on the BB. This is for the flo0}ppy controller that CSS is planning to release. This floppy controller will allow the user to attach industry standard disk d0}rives -- up to 80 track 720K - to the BB. The MIO comes with a heavy duty 9v power supply. The BlackBox comes with a power s0}upply which has +12v -12v and +5v output. All three voltages are used by the BB. Menus Both the MIO and the BlackBox have 0}menus. Here is a list of options available from the Main Menu of both: 1) Assign drives as floppy disks, or hard drive parti0}tions. When assigning floppy drives, you can assign any physical floppy drive as and drive from D1: to D8: (and D9: on the Bl0}ackBox). Note: On the MIO ramdisks can also be defined. These ramdisks refer to MIO memory only - not memory available insid0}e the computer. A DOS ramdisk handler must be used for memory in the computer. 2) Swap drives - shows up as 'Exchange Drives0}' on the BlackBox and allows you to swap the drive assignments of two drives. For example, you could swap drives 1 and 4. The0} drive assigned to D4: would then become logical drive #1 and you could boot from it while the drive that was drive 1 would t0}hen be addressable as D4:. I am writing this using PaperClip which I booted from my hard drive using this method. 3) Lock Dr0}ive - Write locks a drive if it a hard drive partition or a RAMdisk. 4) Save configuration - This writes the current configu0}ration to the first sector of device 0,0 (the first hard drive on your system). If no hard drive is present this option does 1}nothing. The other options available from these menus are different enough to need separate descriptions. The MIO Menu: 1}The MIO Menu is entered by holding down the